import install from './install';
import createMatcher from './createMatcher'
import HashHistory from './history/hashHistory';
import BrowserHistory from './history/browserHistory';
class VueRouter {
    constructor(options) {
        let routes = options.routes || [];//获取用户的整个配置
        //创建匹配器的过程 1.匹配功能 match 2.可以添加匹配  动态路由添加 addRoutes
        this.matcher = createMatcher(routes);

        this.mode = options.mode || 'hash';

        //创建历史管理 (路由有两种模式  hash  浏览器api)
        switch (this.mode) {
            case 'hash':
                this.history = new HashHistory(this)
                break;
            case 'history':
                this.history = new BrowserHistory(this)
                break;
        }
        
    }
    match(location){
        return this.matcher.match(location);
    }
    //目前这个app指代的就是最外层的new Vue
    init(app){
        //需要根据用户的配置 做出一个映射表  /about 
        //初始化时需要根据当前路径 实现一下页面跳转的逻辑
        const history = this.history;

        let setupHashListener = () => {
            history.setupListener();//hashchange
        }
        //跳转路径  会进行匹配操作  根据路径获取对应的记录 
        history.transitionTo(history.getCurrentLocation(),setupHashListener);

        //初始化时都需要调用更新_route的方法
        //只要current变化就触发次方法
        history.listen((route)=>{
            app._route = route;//更新视图的操作，当current变化后再次更新_route属性
        })

        // transitionTo  跳转逻辑 hash/browser都有
        //getCurrentLocation  hash和browser实现不一样
        // setupHashListener hash箭监听

    }
}

VueRouter.install = install;

export default VueRouter;